package practiceProjects;

import java.io.File;

/**
 * @Project ：learn_java
 * @File ：DeleteUnzippedFiles01.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/7 19:52
 * @Description ：删除路径下压缩包已经解压的文件，腾出空间
 */

public class DeleteUnzippedFiles01 {
    public static void main(String[] args) {
        String path = "E:\\DDD\\file\\字体";
        // String path = "E:\\DDD\\下载\\Compressed";

        File file = new File(path);

        if (!file.exists() || !file.isDirectory()) {
            System.out.println("文件夹不存在或该路径不是文件夹");
            return;
        }

        File[] files = file.listFiles();

        if (files == null) {
            System.out.println("路径为空");
            return;
        }

        for (File f : files) {
            if (f.getName().endsWith(".7z") ||
                f.getName().endsWith(".zip") ||
                f.getName().endsWith(".rar")) {

                // 获取压缩包的名称
                String baseName = f.getName().substring(0, f.getName().lastIndexOf('.'));
                // 同名文件夹
                File unzippedDir = new File(path, baseName);

                if (unzippedDir.exists()) {
                    if (deleteDirectory(unzippedDir)) {
                        System.out.println("已删除" + unzippedDir.getAbsolutePath());
                    }
                    else {
                        System.out.println(unzippedDir.getAbsolutePath() + "删除失败，程序中断");
                        return;
                    }
                }
            }
        }
    }

    /**
     * 递归删除文件夹及其内容
     * @param dir 要删除的文件夹
     * @return 删除是否成功
     */
    public static boolean deleteDirectory(File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    // 递归删除子文件夹
                    if (!deleteDirectory(file)) {
                        return false;
                    }
                } else {
                    // 删除文件
                    if (!file.delete()) {
                        System.out.println("删除文件失败: " + file.getAbsolutePath());
                        return false;
                    }
                }
            }
        }
        // 删除文件夹本身
        // 之前的程序就是因为少了这一步，出现了bug
        return dir.delete();
    }
}
